"""
ReadME：
本示例主要演示工作量文档的导入以及COPQ的计算
1.从Redmine系统导出工作量的csv文件
2.有些文件不是采用utf-8编码的，暂时需要手动编辑文件修改编码为utf-8（自动修改编码方式的后期再优化）
3.因为新旧Redmine的字段不互通，同一个意思的字段内容不一样。需要将列名进行统一处理
4.表格的列顺序需要保持一致
"""

import os

import pandas as pd

# 文件的加载路径
path = 'C:/Users/pc/Desktop/Data/'

# for fileName in os.listdir(path):
#     df_temp = pd.read_csv(path + fileName, encoding='utf-8', encoding_errors='ignore')
#     print(df_temp.head(3))
#     print()

# 定义DataFrame，用户将多个CSV文档合并到一个DataFrame中
df = pd.DataFrame()
# bug类型的范围定义
bugList = ["Bug", "Bug-ST", "NotBug", "同根bug", "未再现", "现状OK", "长期改善"]

# 合并多个CSV文档
for fileName in os.listdir(path):
    if fileName.endswith('.csv'):
        df_temp = pd.read_csv(path + fileName, encoding='utf-8', encoding_errors='ignore')

        df_temp.columns = ["项目", "跟踪", "日期", "用户", "小时"]
        # print(df_temp.info())

        # if fileName == "512301.广汽传祺-IM项目.csv" or fileName == "203302.4S店E客服.csv" or fileName == "511303.DCSP平台三期.csv":
        #     df_temp.rename(columns={"Bug类型": "跟踪"}, inplace=True)
        #     print(df_temp.info())

        df = pd.concat([df, df_temp])

df.to_excel('C:/Users/pc/Desktop/Data/工作量汇总.xlsx')

# 过滤bug的工时
bugTime = df[df["跟踪"].isin(bugList)].sum()["小时"]  # bug的工时总数
print(bugTime)
print()
# 计算总工时
totalTime = df["小时"].sum()
print(totalTime)
print()
# 计算COPQ的值
print("COPQ：" + round(bugTime * 100 / totalTime, 2).__str__() + "%")

# 计算每个项目的实际COPQ值
totalTimeByPro = df.groupby("项目")["小时"].sum()
bugTimeByPro = df[df["跟踪"].isin(bugList)].groupby("项目")["小时"].sum()

totalTimeByPro = pd.merge(totalTimeByPro, bugTimeByPro, on="项目", how='left')
totalTimeByPro.columns = ["总工时", "Bug工时"]

totalTimeByPro["COPQ(%)"] = round(totalTimeByPro["Bug工时"] * 100 / totalTimeByPro["总工时"], 2)
totalTimeByPro.to_excel('C:/Users/pc/Desktop/Data/按项目计算COPQ.xlsx')
